---
title: Camera 摄像机
icon: Camera
relatedFile: app/src/core/stage/Camera.tsx
---

摄像机服务

该服务管理应用程序中的虚拟摄像机，模拟一个在空中悬浮的小型飞行器，能够通过喷气（WASD键）进行移动，并受空气阻力影响。它还处理摄像机的缩放（滚轮控制），缩放级别会影响移动速度。此外，服务还包含处理摄像机位置异常、回弹效果、冲击式移动以及循环空间限制等逻辑。

## 属性

### `location`

摄像机在世界坐标系中的当前位置。

### `targetLocationByScale`

上次鼠标缩放滚轮交互时的世界坐标位置，用于缩放时保持视野中心不变。

### `speed`

摄像机当前的移动速度矢量。

### `accelerateCommander`

控制摄像机加速方向的矢量，用于处理WASD按键输入。

### `currentScale`

摄像机当前的镜头缩放比例，会逐渐趋近于目标缩放比例。

### `targetScale`

摄像机目标镜头缩放比例。

### `shakeLocation`

震动特效导致的位置偏移，表示摄像机自身的震动。

## API 方法

### `pageMove(direction: Direction)`

触发一次翻页式移动，使摄像机在接下来的多帧内朝指定方向移动一段距离。

### `bombMove(targetLocation: Vector, frameCount = 40)`

触发爆炸式移动，使摄像机在指定帧数内平滑移动到目标世界坐标。

### `tick()`

每帧更新摄像机状态，包括计算摩擦力、动力、处理冲击式移动、缩放以及循环空间限制。

### `setAllowScaleFollowMouseLocationTicks(ticks: number)`

设置允许摄像机跟随鼠标位置缩放的帧数延迟。

### `zoomInByKeyboard()`

通过键盘操作放大摄像机镜头。

### `zoomOutByKeyboard()`

通过键盘操作缩小摄像机镜头。

### `clearMoveCommander()`

强制清除移动动力命令，防止无限滚动。

### `reset()`

重置摄像机缩放和位置，使其画面刚好能容纳舞台上所有内容的边界矩形。

### `resetBySelected()`

根据当前选中的实体重置摄像机视图，使其聚焦于选中实体。

### `resetByRectangle(viewRectangle: Rectangle)`

根据给定的矩形区域重置摄像机视图，使其聚焦于该区域。

### `resetScale()`

将摄像机缩放比例重置为1。

### `resetLocationToZero()`

将摄像机位置重置到世界坐标原点。
